阅读更多

6顶
4踩

Web前端
json2html是一个基于JavaScript的HTML模板库,顾名思义,该库主要用于将JSON对象转换为HTML格式。


使用json2html进行JSON转换,需要先通过JSON来指定转换规则,比如使用转换对象的名称值或属性值作为DOM HTML元素的属性。以下是几个预留的属性名:

  • tag:指定DOM元素的类型(div、span等)
  • html:指定DOM元素需要包含的内容
  • children:指定DOM元素的下一级内容
示例:

var transform = {'tag':'li','html':'${name} (${age})'};

var data = [
      {'name':'Bob','age':40},
      {'name':'Frank','age':15},
      {'name':'Bill','age':65},
      {'name':'Robert','age':24}
];

document.getElementById('list').innerHTML = json2html.transform(data,transform);


结果如下:

<ul id="list">
    <li>Bob (40)</li>
    <li>Frank (15)</li>
    <li>Bill (65)</li>
    <li>Robert (24)</li>
</ul>

json2html提供了以下两种形式,以便在服务器端和客户端都能使用:

  • jQuery插件形式:扩展了jQuery的核心库,包含了jquery事件
  • node.js包形式:可用于基于node.js的web服务器
项目官网:http://json2html.com/
  • 大小: 16.2 KB
6
4
评论 共 13 条 请登录后发表评论
13 楼 skzr.org 2013-05-31 21:45
非常nice,已经有相关的技术了,可以参考下:http://angularjs.org/
或者国内的社区:http://angularjs.cn/
12 楼 elgs 2013-05-31 02:30
JSON is ruling the world now.
11 楼 JanckyWong 2013-05-30 20:16
怎么用l?js来用?
10 楼 damoqiongqiu 2013-05-30 13:23
没有类似Ext那种HTML模板机制,对于复杂的JSON对象,做起来确实比较吃力。
9 楼 cgs1999 2013-05-30 11:13
这个比较适合简单的处理,复杂的处理貌似不适合。

目前使用artTemplate来进行类似的处理
http://aui.github.io/artTemplate/

例子
-------------------------------------------------------------------
<script>
var userTmpl = template('userTmpl', {mts:data});
document.getElementById('userList').innerHTML = userTmpl;
</script>

<script id="userTmpl" type="template">
{each mts as mt i}
 <li id="mt-{mt.mtNO}"  class="clearfix mt {if !mt.online}offline{/if}" data-mtno="{mt.mtNO}" data-type="{mt.mtType}">
		<div class="border clearfix">
			   <div class="left">
					<div class="face">
					   {if mt.online}
						 <div><img src="{mt.portrait}"/></div>
					   {else}
					      <div><img class="offline" src="{mt.portrait}"/></div>
					   {/if}
					</div>
				</div>
				<div class="con">
					<div class="con_right">
								
						<div class="mcc-action">
									{if mt.online}
										<a class="del" title="删除与会方" style="display:none"></a>
									{else}
										<a class="del" title="删除与会方"></a>
									{/if}

						            {if mt.callState==-1}
									   <a class="call" title="呼叫"></a>
                                       <a class="hang-up" title="挂断" style="display:none;"></a>
									{else if mt.callState==1}
									    <a class="hang-up" title="挂断"></a>
										<a class="call" title="呼叫" style="display:none;"></a>
									{else}
                                         <a class="call" title="呼叫" style="display:none;"></a>
									     <a class="hang-up" title="挂断" style="display:none;"></a>
									{/if}

                                    {if mt.silenceView}
                                        <a class="silence" title="设置静音"></a>									 
									{else}
                                        <a class="silence" title="设置静音" style="display:none;"></a>
									{/if}
									

                                    {if mt.unsilenceView}
                                        <a class="unsilence" title="取消静音"></a>
									{else}
                                        <a class="unsilence" title="取消静音" style="display:none;"></a>
									{/if}


                                    {if mt.unmuteView}
									    <a class="unmute" title="取消哑音" ></a>
									{else}
                                        <a class="unmute" title="取消哑音" style="display:none;"></a>
									{/if}

									{if mt.muteView}
                                        <a class="mute" title="设置哑音" ></a>
									{else}
                                        <a class="mute" title="设置哑音" style="display:none;"></a>
									{/if}
						            
									{if mt.chairmanView}
                                       <a class="chairman" title="设为管理方"></a>
									{else}
                                       <a class="chairman" title="设为管理方" style="display:none;"></a>
									{/if}

									{if mt.unchairmanView}
									   <a class="unchairman" title="取消管理方"></a>
									{else}
									   <a class="unchairman" title="取消管理方" style="display:none;"></a>
									{/if}
                                  
								    {if mt.speakerView}
								       <a class="speaker" title="设置发言方"></a>
									{else}
									  <a class="speaker" title="设置发言方" style="display:none;"></a>
									{/if}
									  
									{if mt.unspeakerView}
									   <a class="unspeaker" title="取消发言方"></a> 
									 {else}
									   <a class="unspeaker" title="取消发言方" style="display:none;"></a> 
									{/if}

									 
									 
						</div>
					</div>
					<div class="con_left">
						<div class="name" data-pinyin="{mt.pinyin}">{mt.mtAlias}</div>
						<div class="status">
							  <div class="current-status">
							      {if mt.online}
									  {if mt.secVideoState}
									    <a class="two-stream"></a>
									  {else}
									     <a class="two-stream" style="display:none;"></a> 
									  {/if}

									  {if mt.speakerState}
									    <a class="speaker"></a>
									  {else}
									     <a class="speaker" style="display:none;"></a> 
									  {/if}

									  {if mt.vmpState}
									    <a class="vmp"></a>
									  {else}
									     <a class="vmp" style="display:none;"></a> 
									  {/if}

									  {if mt.discussState}
									    <a class="discuss"></a>
									  {else}
									     <a class="discuss" style="display:none;"></a> 
									  {/if}

									  {if mt.chairmanState}
									    <a class="chairman"></a>
									  {else}
									     <a class="chairman" style="display:none;"></a> 
									  {/if}

									  {if mt.silenceState}
									    <a class="silence"></a>
									  {else}
									     <a class="silence" style="display:none;"></a> 
									  {/if}

									  {if !mt.muteState}
									    <a class="unmute"></a>
									  {else}
									     <a class="unmute" style="display:none;"></a> 
									  {/if}
								   {else}	
								       <a class="two-stream" style="display:none;"></a> 
								       <a class="speaker" style="display:none;"></a>
								       <a class="vmp" style="display:none;"></a> 
								       <a class="discuss" style="display:none;"></a> 
								       <a class="chairman" style="display:none;"></a> 
								       <a class="silence" style="display:none;"></a>
                                       <a class="unmute" style="display:none;"></a> 
								   {/if}
							   </div>
							   {if mt.callState==0}
							     <div class="immediacally-status">正在呼叫中...</div>
							   {else}
							      <div class="immediacally-status" style="display:none;">正在呼叫中...</div>
							   {/if}
						</div>
					</div>
				</div>
		</div>
	</li>
   {/each}
</script>
8 楼 zzzppp123999 2013-05-30 09:56
log.debug("测试");log.debug("测试");
7 楼 liu_qchao 2013-05-30 08:39
有点像ExtJS的模板,不过功能比较弱,下一步可以考虑支持运算符、表达式和内建函数
6 楼 clxy 2013-05-30 08:15
html模板有个巨大的优势是直观,用浏览器直接打开,所见(基本上大概)即所得。
json模板也许速度会快,但没有了这个优势。特别是复杂的界面,加上循环和分歧等,貌似不大乐观。
5 楼 lihao312 2013-05-29 18:13
lysvanilla 写道
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?


请注意var transform = {'tag':'li','html':'${name} (${age})'};  
这是转换规则


不好意思 刚刚看到
4 楼 lysvanilla 2013-05-29 18:12
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?


请注意var transform = {'tag':'li','html':'${name} (${age})'};  
这是转换规则
3 楼 wangguo 2013-05-29 18:11
lihao312 写道
这个? 可以转化其他的? 比较不是ul是div呢?

可以指定
var transform = {'tag':'li','html':'${name} (${age})'}; 
2 楼 lihao312 2013-05-29 18:11
var chartData = { groups:
  [{value:100,label:'Day 1'},
   {value:50,label:'Day 2'},
   {value:150,label:'Day 3'},
   {value:40,label:'Day 4'},
   {value:50,label:'Day 5'}
]};

var transforms = {
barChart: [
    {tag:'ul',class:'barChart',children:function() {
        return($.json2html(this.groups,transforms.group));
    }}
],
group: [
    {tag:'li',class:'group',children:[
        {tag:'div',class:'bar',style:'height:${value}px;'},
        {tag:'div',class:'label',html:'${label}'}
    ]}
]
};

$('#chart').json2html(chartData, transforms.barChart);
1 楼 lihao312 2013-05-29 18:09
这个? 可以转化其他的? 比较不是ul是div呢?

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • 数据库设计实验报告

    在线公交查询系统,能够根据站点,线路和换乘三种情况查询公交线路。换乘查询分为时间最短和换乘最少两种。

  • 数据库E-R图关系模型转换

    以下为例题: “学生_课程”数据库中记录学生、班级、课程、教师等信息,学生有学号,班级号,姓名,性别,出生日期等信息;班级有班级号,班级名称,所属专业,系别等信息;教师有教师号,教师姓名,性别,出生日期,职称等信息。 其中一名学生可选修多门课程,一门课程也可有多名学生选修,每个学生每门课程都有成绩,一名老师任教多门课程,一门课程也可由多名老师教授 一个学生属于一个班级,一个班级有多名学生。 对此题干分析提炼出实体一共有四个(学生,课程,教师,班级),其中教师与课程构成n对n的关系,课程与学生也构成n

  • 数据库_数据库设计1

    1 关系数据理论知识 2 问题的提出 如何构造出一个好的数据库模式 3对2问题的回答,规范化理论 关系模式的概念 R U F 4 数据依赖:包含:函数依赖,多值依赖 依赖关系的表达 5 关系模式可能出现的问题 数据冗余 更新异常 插入异常 删除异常 6 细节 :主属性不能为空,数据库满足的完整性约束 1范式的概念,按属性间依赖关系来区分关系规范化程度  范式的表达/分

  • 计算机原理(二)

    计算机原理(二) 数据描述的三个领域 1.现实世界   现实世界是存在于人们头脑之外的客观世界,是客观事物及其互相的联系。例如学校教学管理中涉及的学生管理、教师管理、课程管理。管理者要求:每个学期开学时制作学生选修课程情况表,内容包括学号、姓名、课程名、选修课类别(类别分为必修、选修);每个学期结束时制作学生选修课程成绩表,内容包括学号、姓名、课程名、选修课的类别、总评成绩;制作教师授课安...

  • 数据库 实验七

    实验内容 问题描述:某学院有基本实体集:系、教师、学生和课程。各个实体的属性集为: 系:系编号,系名,地址 课程:课程号,课程名称,开课学期 学生:学号,学生姓名,性别,住址 教师:教工号,教师姓名,办公室 实体间的联系有:每个系有一位系主任,有多位教师;一个教师只能在一个系任职;每个系开设多门不同课程;一门课程只能由一个系负责开设;每门课程只能由一个教师授课,一个教师可以讲授多门课程...

  • Oracle系统案例——学生信息管理系统

    学生信息管理系统。

  • 6管理信息系统笔记

    第六章 管理信息系统的系统设计 第一节系统设计的主要工作 第二节代码设计 第三节系统架构设计 第四节功能结构设计 第五节信息系统流程图设计 第六节系统物理配置方案设计 第七节数据存储设计 第八节输出设计 第九节输入设计 第十节处理流程图设计 第十一节制定设计规范和编写设计报告 项目实战 (1)对进销存管理系统的功能模块进行设计。 (2)对进销存管理系统的输入和输出进行设计。 (3) 创建进销存管理系统的数据库jxcdata.accdb;在该数据库中创建以下数据表:部门、员工、仓库、供应商、客户、商品信息、商

  • ER图(转)

          E-R图为实体-联系(Entity-Relation)图,提供了表示实体型、属性和联系的方法,用来描述现实世界的概念模型。   构成E-R图的基本要素是实体型、属性和联系,其表示方法为:   · 实体型(Entity):用矩形表示,矩形框内写明实体名;比如学生张三丰、学生李寻欢都是实体。   · 属性(Attribute):用椭圆形表示,并用无向边将其与相应的实体连接...

  • 程序设计综合实验——集合的表示与实现

    通过代码编写生成随机数求集合元素规模较大的运算。通过键盘输入的方式求方程的解集、几数之间的公倍数等集合元素规模较小的运算。实验结果能够顺利实验集合的交集、并集、差集等运算。

  • 实验五——数据库设计实验

    实验五——数据库设计实验一、实验题目二、 实验内容和要求三、实验步骤1.分析问题2.概念结构设计3.逻辑结构设计四、实验心得体会 一、实验题目 数据库设计实验 二、 实验内容和要求 掌握数据库设计基本方法及数据库设计工具。 掌握数据库设计基本步骤,包括数据库概念结构设计、逻辑结构设计,物理结构设计,数据库模式 SQL 语句生成。能够使用数据库设计工具进行数据库设计。 三、实验步骤 一个供应商可以供应多种零件,一种零件也可以有多个供应商。一个客户订单可以订购多种供应商供应的零件。客户和供应商都分属不同的国家,

  • 数据库应用与设计的四个实验

    select from join on where order by count compute

  • 苏州大学 数据库题库

    2数据库设计基础(完整版可去资源下载处下载压缩包) 1.学院的每名教师只能属于一个系,则实体系和实体教师间的联系是() 一对一 多对多 多对一 一对多 参考答案:D 试题评析 本题考查知识点是实体联系。 一对多联系表现为主表中每一条记录与相关表中的多条记录关联。每名教师只能属于一个系,-个系中可以有多名教师,所以系与老师的关系为一对多。 所以本题答案为D。 2.数据库管理系统(DBMS)是() 系统软件 硬件系统 一个完整的数据库应用系统 既包括硬件、也包括软件的系统 参..

  • 问题 C: C语言11.4

    问题 C: C语言11.4 时间限制:1 Sec内存限制:32 MB献花:107解决:92[献花][花圈][TK题库] 题目描述 设有若干个人员的数据,其中包含学生和教师。学生的数据中包括:号码、姓名、性别、职业、班级。教师的数据包括:号码、姓名、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。现在要求把这些数据放在同一个表格中储存,使用结构体中的共用体实...

  • 数据库实验八 触发器实验

    数据库实验八 触发器实验 掌握数据库触发器的设计和使用方法。 定义 BEFORE 触发器和 AFTER 触发器。能够理解不同类型触发器的作用和执行原理,验证触发器的有效性。

  • SQL触发器总结 - sql server 2012数据库基础-触发器及应用-实验报告

    这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 1. 实验目的 理解和掌握数据库中触发器的创建方法,体会触发器执行的条件和作用 2. 实验内容 在SQL Server 环境下设计、创建DML触发器,并设定相关操作使触发器运行 3. 实验要求 在实验5数据库设计...

  • 数据库实验-触发器实验

    一、实验目的 1.掌握触发器的创建、修改和删除操作。 2.掌握触发器的触发执行。 3.掌握触发器与约束的不同。 二、实验环境 硬件平台:PC; 软件平台:Windows 7 / SQLSERVER 2008 R2; 三、实验内容 1、 在 Student 表中编写 insert 的触发器,假如每个班的学生不能超过 30 个,如果低于此数,添加可以完成;如果超过此数,则插入将不能实现。 2、 在 ...

  • SQL存储过程总结 - sql server 2012数据库基础-存储过程及应用-实验报告

    这是我大三第一学期《数据库基础》这门课的实验报告,总共15个实验,我挑了几个比较重要的放在博客上,方便查看和复习,尤其是最近SSM后端开发,希望对大家,以及将来的我有所帮助! 本文是存储过程,通过书本和网上的参考代码和讲解,大致把存储过程理解为一个自定义函数,在多次重复使用某一个功能的时候,可以把这个功能写成一个自定义函数(存储过程),这样使代码可读性增加,逼格也更高...... 实验要求 ...

  • mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计

    任务三 数据库的单表查询设计文章目录任务三 数据库的单表查询设计【实训目的与要求】【实训原理】【实训步骤】一、简单查询二、按条件查询1.比较大小查询2.带in关键字的查询(确定集合)3.带BETWEEN AND关键字的查询(确定范围)4.空值查询5.带LIKE关键字的查询(字符匹配)6.带AND关键字的查询(多重条件查询)7.带OR关键字的查询(多重条件查询)三、高级查询1.聚集函数2.分组查询3...

  • 07 数据库系统设计综合实验 实验报告

                                         07 数据库系统设计综合实验  实验报告                                                                               广州大学学生实验报告                                  开课学院及实验室:计算机科学与工程实...

  • 定义一个teacher(教师)类和一个student(学生)类,二者有一份数据成员是相同的,例如num,name,sex。编写程序,将一个student对象(学生)转换为teacher(教师)类,

    谭浩强课后习题4_7 定义一个teacher(教师)类和一个student(学生)类,二者有一份数据成员是相同的,例如num,name,sex。编写程序,将一个student对象(学生)转换为teacher(教师)类,只将以上3个相同的数据成员移植过去。可以设想为:一个学生大学毕业了,留校担任教师,他原有的部分数据对现在的教师身份来说仍然是有用的,应当保留并成为其教师的数据的一部分。 # in...

Global site tag (gtag.js) - Google Analytics